4.3. Руководство по инсталляции сервиса конфигурации (бэкенда)

4.3.1. Назначение и общий функционал работы с бэкендом

Бэкенд (англ. backend)
Представляет собой программно-аппаратную часть сервиса, набор средств, с помощью которых происходит реализация логики веб-сайта. Бэкенд для предоставления своих функций реализует API, которые использует фронтенд.
Фронтенд (англ. frontend)
Является клиентской стороной пользовательского интерфейса к программно-аппаратной части сервиса.

Фронт- и бэкенд — это вариант архитектуры программного обеспечения.

4.3.2. Установка бэкенда

Примечание

Можно установить и настроить несколько экземпляров бэкенда. Все экземпляры бэкенда устанавливаются аналогично. О настройке см. Настройка нескольких экземпляров бэкенда.

Для установки бэкенда сначала необходимо установить Docker и Vault.

Подробнее об установке и настройке Docker можно посмотреть здесь: https://docs.docker.com/get-started/.

Подробнее об установке и настройке Vault см. Руководство по инсталляции сервиса системных настроек Vault.

Если реестр Docker, содержащий образ бэкенда, недоступен или отсутствует, тогда необходимо скачать образ бэкенда из архивного файла, выполнив в командной строке команду:

docker load -i /path/to/image.tar.gz

Здесь:

/path/to/image.tar.gz
Пример пути к архиву с образом бэкенда.

Если реестр Docker, содержащий образ бэкенда, доступен, тогда для установки бэкенда нужно войти в реестр Docker, выполнив в командной строке команду:

docker login registry.igtel.ru:6443

При входе необходимо ввести логин и пароль.

После этого нужно скачать образ бэкенда из Docker, выполнив в командной строке команду:

docker pull registry.igtel.ru:6443/sgate/backend

После того как образ скачан (из архивного файла или из реестра Docker), необходимо запустить контейнер, выполнив в командной строке команду в многострочном формате (после символа

\

должен быть перенос строки без пробелов и других символов):

docker run -d \
--env SGATE_SERVER_HOST=0.0.0.0 \
--env SGATE_SERVER_PORT=8081 \
--env SGATE_VAULT_URL=http://devops.igtel.ru:8200 \
--env SGATE_VAULT_TOKEN=s.xRYEe6FCAHn1DAdOAqodkz4Z \
--env SGATE_VAULT_ENGINE=sgate \
--env SGATE_VAULT_VERSION=2 \
--env SGATE_VAULT_SOURCES="common backend" \
-p 8081:8081 --name sgate_backend \
registry.igtel.ru:6443/sgate/backend

Здесь:

SGATE_SERVER_HOST
Хост сервиса в контейнере.
SGATE_SERVER_PORT
Порт сервиса в контейнере. Можно выбрать любой свободный порт в Системе.
SGATE_VAULT_URL
URL сервиса Vault с конфигурацией сервиса.
SGATE_VAULT_TOKEN
Токен для логина в Vault.
SGATE_VAULT_ENGINE
Название Vault engine, где хранятся настройки.
SGATE_VAULT_VERSION
Версия хранилища Vault.
SGATE_VAULT_SOURCES
Список секретов (secrets), которые будут использоваться сервисом. В примере это секреты «common» и «backend». Cекреты в списке разделяются пробелом. Секреты подгружаются в порядке, указанном в списке. Если секреты содержат одинаковые ключи, то значение для ключа берется из последнего секрета, в котором найден ключ. Таким образом, можно выделить общие настройки и переопределять их для нужных сервисов.
8081:8081
Указываются номер порта на сервере и номер порта в контейнере (порт на сервере маппится на порт в контейнере).
name
Указывается название контейнера для использования его при обращении (вместо идентификатора). В примере это «sgate_backend».
registry.igtel.ru:6443/sgate/backend
Образ бэкенда.

4.3.3. Общая настройка всех сервисов

Общая настройка всех сервисов заключается в добавлении общих для всех сервисов ключей и их значений в соответствующий секрет Vault.

Ключи, общие для всех сервисов, удобно выделить в один секрет. Название секрета, содержащего ключи, общие для всех сервисов, может быть любым, например, «common».

Для всех сервисов общими являются следующие ключи:

4.3.3.1. Параметры аутентификации

basic.username
Логин к административной части сервиса (если она есть).
basic.password
Пароль к административной части сервиса (если она есть).
jwt.algorithm
Механизм проверки подлинности JWT (HS256, HS384 или HS512).
jwt.key
Ключ для подписи JWT в формате base64. Должен соответствовать механизму проверки.

4.3.3.2. Параметры SSL

ssl.enabled
Включает/выключает поддержку SSL сервисом (true или false).
ssl.store-path
Путь к хранилищу ключей SSL в контейнере.
ssl.store-pass
Пароль к хранилищу ключей SSL.
ssl.key-pass
Пароль к ключу в хранилище.

4.3.3.3. Пример общих настроек

Пример заполнения общих для всех сервисов ключей в секрете:

{
"basic.password": "passwd",
"basic.username": "login",
"jwt.algorithm": "HS512",
"jwt.key": "4bAKMH0ob8d2v4m0yOLuI/18psZgEo45AXnOQ9d9rd5Yzux4CnL5f1POQmrjJLCfg7Pn+8Ohqb8mGjlA/15Ciw==",
"ssl.enabled": "true",
"ssl.store-path": "keystore.jks",
"ssl.store-pass": "storepasswd",
"ssl.key-pass": "keypasswd"
}

4.3.4. Настройка бэкенда

Настройка бэкенда заключается в добавлении ключей и их значений в соответствующих секретах Vault.

Для бэкенда необходимо добавить следующие ключи в секрет/секреты Vault:

4.3.4.1. Параметры 2-х факторной авторизации

2fa.secret.expire
Время жизни пароля двухфакторной аутентификации (2FA) в формате ISO 8601. PT5M означает 5 минут. Подробнее см. https://www.digi.com/resources/documentation/digidocs/90001437-13/reference/r_iso_8601_duration_format.htm.
2fa.secret.length
Длина пароля 2FA.

4.3.4.2. Параметры почтового сервера

2fa.smtp.from
Email отправителя письма с паролем.
2fa.smtp.password
Пароль к SMTP-серверу.
2fa.smtp.url
URL SMTP-сервера.
2fa.smtp.username
Логин к SMTP-серверу.

4.3.4.3. Параметры подключения к адаптеру remedy

adapter.username
Логин к адаптеру Remedy. Если не переопределено для адаптера, то совпадает с ключом basic.username (из ключей, общих для всех сервисов).
adapter.password
Пароль к адаптеру Remedy. Если не переопределено для адаптера, то совпадает с ключом basic.password (из ключей, общих для всех сервисов).

4.3.4.4. Параметры кеширования

cache.concurrency-level
Настройка параллельного доступа к кэшу для операций обновления. Подробнее см. https://guava.dev/releases/18.0/api/docs/com/google/common/cache/CacheBuilder.html#concurrencyLevel(int).
cache.expire-after-write
Время жизни кэша в формате ISO 8601.
cache.initial-capacity
Начальный размер кэша.
cache.maximum-size
Максимальный размер кэша.

4.3.4.5. Параметры подключения к базе данных бекенда

datasource.driver-class-name
JDBC драйвер для БД бэкенда.
datasource.jdbc-url
JDBC URL БД бэкенда.
datasource.username
Логин к БД бэкенда.
datasource.password
Пароль к БД бэкенда.

4.3.4.6. Параметры времени жизни JWT токена

jwt.lifetime
Время жизни JWT в секундах.

4.3.4.7. Параметры подключения к LDAP

ldap.user
Логин к LDAP.
ldap.password
Пароль к LDAP.
ldap.role_dn
Уникальное имя роли (LDAP role DN).
ldap.role_filter
Фильтр роли LDAP.
ldap.url
URL LDAP.
ldap.user_dn
Уникальное имя пользователя LDAP.
ldap.user_filter
Фильтр пользователя LDAP.

4.3.4.8. Параметры управления интеграционными маршрутами

integration.enabled
Флаг (boolean) активации механизма интеграций (по умолчанию - true);
integration.sync.interval
Интервал синхронизации интеграций (маршрутов, эндпоинтов/ресурсов) в секундах (по умолчанию - 15 минут);
integration.sync.retry
Параметр задержки в секундах перед повторной попыткой синхронизации.
Параметр требуется в случае возникновения ошибок, например, недоступности ресурса или в случае, когда уже выполняется ручная синхронизация.

Примечание

Значение integration.sync.retry должно быть не больше значения integration.sync.interval.

4.3.4.9. Пример заполнения ключей для бэкенда

:

{
"2fa.secret.expire": "PT5M",
"2fa.secret.length": "6",
"2fa.smtp.from": "admin@example.ru",
"2fa.smtp.password": "passwd",
"2fa.smtp.url": "mail.example.ru:587",
"2fa.smtp.username": "mail@example.ru",
"adapter.username": "login",
"adapter.password": "passwd",
"cache.concurrency-level": "8",
"cache.expire-after-write": "PT30S",
"cache.initial-capacity": "32",
"cache.maximum-size": "1024",
"datasource.driver-class-name": "org.h2.Driver",
"datasource.jdbc-url": "jdbc:h2:/var/db/sgate;SCHEMA=PUBLIC;DB_CLOSE_DELAY=-1;TRACE_LEVEL_FILE=1;DATABASE_TO_UPPER=false;MODE=Oracle;AUTO_SERVER=TRUE",
"datasource.password": "123456",
"datasource.username": "sa",
"jwt.lifetime": "240",
"ldap.password": "passwd",
"ldap.role_dn": "ou=roles,dc=igtel,dc=ru",
"ldap.role_filter": "(&(objectClass=groupofnames)(member={0}))",
"ldap.url": "ldap://ci.igtel.ru:389",
"ldap.user": "cn=admin,dc=igtel,dc=ru",
"ldap.user_dn": "dc=igtel,dc=ru",
"ldap.user_filter": "(&(objectClass=inetorgperson)(|(mail={0})(uid={0})))",
"integration.enabled": "true",
"integration.sync.interval": "900",
"integration.sync.retry": "60"
}

4.3.5. Настройка лицензий

Настройка лицензий приложения заключается в добавлении ключей и их значений в соответствующих секретах Vault:

license.key
для указания лицензии в текстовом виде
license.file
для указания лицензии в бинарном виде (указывается абсолютный путь к файлу на сервере или в контейнере/виртуалке)

Примечание

Файл имеет больший приоритет, чем текстовый ключ. Если задан путь к файлу лицензии, для лицензирования используется он.

Примечание

Лицензии необходимо разместить в секрете common, если лицензия не установлена подрядчиком.

4.3.6. Настройка нескольких экземпляров бэкенда

В некоторых случаях необходимо создать несколько экземпляров бэкенда.

Создание нескольких экземпляров бэкенда с одинаковым набором ключей в секретах Vault требуется, например, для балансировки нагрузки на сервер и формирования отказоустойчивой Системы.

Создание нескольких экземпляров бэкенда с разным набором ключей в секретах Vault позволяет, например, работать сразу с несколькими источниками данных (использовать несколько разных БД). Разные БД можно использовать для проведения A/B-тестирования.

Все экземпляры бэкенда устанавливаются аналогично (см. Установка бэкенда). Для каждого экземпляра бэкенда будет создан свой контейнер. Для каждого экземпляра бэкенда нужно выполнить настройку: в зависимости от целей создания дополнительного экземпляра бэкенда для него необходимо создать новые секреты в Vault или использовать уже существующие.